// PROGRAMA : IDCPCB04 PROGRAMA BATCH OPCAO: 'CPD'
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : GEJUSP - GER. DE JUSTICA, SEGURANCA E CIDADANIA
// INSTITUTO DE IDENTIFICACAO
// PROGRAMADOR : * DATA: 20/10/2004
// OBJETIVO : CONSULTA/EMISSAO POR POSTO.
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.util.Arrays;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Idcpcb04Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctc001;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctc004;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.Idclc001;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.Sisldat8;
import br.com.vti.sisp_sicrim.antigo.model.Sisll001;
import br.com.vti.sisp_sicrim.antigo.model.Tablele;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idcpcb04 OBJETIVO : CONSULTA/EMISSAO POR POSTO. *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/idcpcb04")
public class Idcpcb04 {
	// Views utilizadas
	DidCadastro vwDidcad = new DidCadastro();
	SicControle vwDvecon = new SicControle();
	// Telas/relatorios utilizados
	Idctc001 idctc001;
	Idctc004 idctc004;
	Idcpcb04Report report;
	// Includes utilizados
	Idclc001 idclc001 = new Idclc001();
	Sisldat8 sisldat8 = new Sisldat8();
	Sisll001 sisll001 = new Sisll001();
	Tablele tablele = new Tablele();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	Idccc001 idccc001;

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Idcpcb04 idcpcb04Anterior;
	String faseproc = "0";

	private int opc = 0;
	private int i = 0;
	private int y = 0;
	private String chave = "";
	private int ct = 0;
	private int[] pos0 = new int[15];
	private int[] atu1 = new int[15];
	private int[] mat0 = new int[15];
	private int[] via0 = new int[15];
	private String[] end1 = new String[15];
	private long[] reg0 = new long[15];
	private int[] pro0 = new int[15];
	// 1 PRO0 (N9/1:14)
	private String[] nom0 = new String[15];
	private int numpo1 = 0;
	private String[] conimp = new String[3];
	private int posto = 0;
	private int seq = 0;

	private Idctc004 preMapas() {
		idccc001 = new Idccc001(result, sessao);
		idctc001 = new Idctc001(true, sessao);
		idctc004 = new Idctc004(true, sessao);
		Arrays.fill(pos0, 0);
		Arrays.fill(atu1, 0);
		Arrays.fill(mat0, 0);
		Arrays.fill(via0, 0);
		Arrays.fill(end1, "");
		Arrays.fill(reg0, 0);
		Arrays.fill(pro0, 0);
		Arrays.fill(nom0, "");
		Arrays.fill(conimp, "");
		return idctc004;
	}

	public Idcpcb04(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Idctc001 idctc001, Idctc004 idctc004) {
		try {
			main(idctc001, idctc004);
		} catch (Exception e) {
			throw new ExceptionProgram(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Idctc001 pidctc001, Idctc004 pidctc004) throws Exception {
		if (pidctc001 == null && pidctc004 == null) {
			primeiraVez = true;
			// idctc004 = new Idctc004 (primeiraVez);
			idctc004 = preMapas();
			idctc004.setNavegar("../idcpcb04/executar");
			result.include("idctc004", idctc004);
			sessao.setAtributo("IDCPCB04", this);
			idctc004.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pidctc001, pidctc004);
		}
		sessao.setAtributo("IDCPCB04", this);
		result.include("idctc004", idctc004);
		idctc004.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		// DEFINE PRINTER(EFM = 1) OUTPUT 'PSTI0001'
		// RELATORIO 1 PS=60 LS=134 SG=ON
		report = new Idcpcb04Report();
		report.setPageSize(60);
		report.setLineSize(134);
		// RELATORIO
		// SETA PF'S
		idctc001.setDataCorrente(UtilBean.obtemDataDia());
		// Par�grafo: inicio()

		idctc001.setConf("S");
		// DEFINE PRINTER(EFM = 1)
		seq = 0;
		sessao.getSisgsisp().setOperacao("CPD");
		numpo1 = 001;
		sisldat8.datini = 20040101;
		sisldat8.datfim = 20041001;
		// Data Inicial
		// Data Final
		conimp[2] = "X";
		sessao.getSisgsisp().setEmpresa(this.getClass().getSimpleName());
		// Imprime
		tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 207);
		tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", numpo1);
		tablele.resp = funcoes.sisst001(207, numpo1, tablele.resp);
		// //PESQUISA TABELA
		if (UtilBean.subStr(tablele.resp, 0, 1).equals("#")) {
			UtilBean.mensagemTexto(" ERRO NA PESQUISA DA TABELA DE POSTO");
		}
		if (UtilBean.validarMascara(sisldat8.datini, "yyyyMMdd")) {
			UtilBean.mensagemTexto("# ERRO NA DATA INICIAL");
		}
		if (UtilBean.extraiDigitos(sisldat8.datini, 8, 1, 4) < 1985) {
			UtilBean.mensagemTexto("# ERRO: ANO INICIAL < 1985 ");
		}
		if (UtilBean.validarMascara(sisldat8.datfim, "yyyyMMdd")) {
			UtilBean.mensagemTexto("# ERRO NA DATA FINAL");
		}
		if (UtilBean.extraiDigitos(sisldat8.datfim, 8, 1, 4) < 1985) {
			UtilBean.mensagemTexto("# ERRO: ANO FINAL < 1985");
		}
		if (sisldat8.datini > sisldat8.datfim) {
			UtilBean.mensagemTexto("#ERRO: DTA FINAL > DATA INICIAL");
		}
		idctc004.setDtini(sisldat8.datini);
		idctc004.setDtini((int) funcoes.sissd002(idctc004.getDtini()));
		// INVERTE DATAS
		ct++;
		report.setCt(ct);
		idctc004.setDtfim(sisldat8.datfim);
		idctc004.setDtfim((int) funcoes.sissd002(idctc004.getDtfim()));
		if (UtilBean.validaSelecao(conimp)) {
			UtilBean.mensagemTexto("# ERRO: FOI SELECIONADO MAIS DE UMA OPCAO");
		}
		if (!conimp[2].trim().equals("")) {
			relatorio();
		} else {
			if (numpo1 > 0) {
				posto = numpo1;
			} else {
				posto = 999;
			}
			while (vwDidcad.leituraDataAtualizacaoFaixa(sisldat8.datini, sisldat8.datfim)) {
				if (numpo1 > 0) {
					if (!(vwDidcad.getNumeroPosto() == numpo1)) {
						continue;
					}
				}
				if (vwDidcad.fimDados()) {
					if (i > 0) {
						saida();
					}
				}
				if (numpo1 > 0) {
					if (!(vwDidcad.getNumeroPosto() == numpo1)) {
						continue;
					}
				}
				y += 1;
				i += 1;
				idctc004.setAtu1(i, vwDidcad.getDataAtualizacao());
				atu1[i] = (int) funcoes.sissd002(atu1[i]);
				// INVERTE DATAS

				idctc004.setReg0(i, vwDidcad.getNumeroRg());
				idctc004.setEnd1(i, vwDidcad.getEnderecoIdent());
				idctc004.setPos0(i, vwDidcad.getNumeroPosto());
				idctc004.setVia0(i, vwDidcad.getNumeroVia());
				idctc004.setPro0(i, vwDidcad.getNumeroSerieCart());
				// MOVE DINIDE-NUMPRO TO PRO0(I)

				idctc004.setMat0(i, vwDidcad.getMatriculaFunc());
				idctc004.setNom0(i, vwDidcad.getNomeIdent());
				seq += 1;
				if (i == 14) {
					saida();
				}
				if (idctc004.getConf().equals("N")) {
					break;
				}
			}

		}
		if (vwDidcad.registrosProcessados() == 0) {
			// (null, "");
			return;
		}
	}

	private void saida() throws Exception {

		//
		idctc004.receberTela(false, result);
		if (idctc004.getOpc() > 0) {
			if (idctc004.getOpc() > i) {
				UtilBean.mensagemTexto("NUMERO SELECIONADO INVALIDO");
			}
			do {
				while (vwDidcad.leituraNomeIdentMaiorig(nom0[opc])) {
					idccc001.executar(vwDidcad);
				}

				// COPYCODE CONSULTA
				idctc004.setConf("S");
				//
				idctc004.receberTela(false, result);
				// TELA CONSULTA ATUALIZACOES P/POSTO
				if (idctc004.getConf().equals("N")) {
					break;
				}
			} while (!(idctc004.getOpc() == 0));
		}
		idctc004.setConf("S");
		//
		idctc004.receberTela(false, result);
		// TELA CONSULTA ATUALIZACOES P/POSTO
		if (idctc004.getConf().equals("N")) {
			return;
		}
		i = 0;
		for (int i1 = 1; i1 <= 14; i1++) {
			reg0[i1] = 0;
			pos0[i1] = 0;
			nom0[i1] = "";
			atu1[i1] = 0;
			via0[i1] = 0;
			mat0[i1] = 0;
			pro0[i1] = 0;
			end1[i1] = "";
		}
	}

	private void relatorio() throws Exception {
		// RELATORIO 1 PS=60 LS=134 SG=ON
		report.setPageSize(60);
		report.setLineSize(134);
		// RELATORIO
		while (vwDidcad.leituraDataAtualizacaoFaixa(sisldat8.datini, sisldat8.datfim)) {
			if (numpo1 > 0) {
				if (!(vwDidcad.getNumeroPosto() == numpo1)) {
					continue;
				}
			}
			if (vwDidcad.fimDados()) {
				if (i > 0) {
					saida();
				}
			}

			idctc001.setDatnas(vwDidcad.getDataNasc());
			idctc001.setDatnas((int) funcoes.sissd002(idctc001.getDatnas()));
			// INVERTE DATAS
			ct++;
			report.setDatatu(vwDidcad.getDataAtualizacao());
			report.setDatatu((int) funcoes.sissd002(report.getDatatu()));
			report.setDatexp(vwDidcad.getDataExp());
			report.setDatexp((int) funcoes.sissd002(report.getDatexp()));
			report.setNommae(vwDidcad.getNomeMae());
			report.setNomide(vwDidcad.getNomeIdent());
			report.setDinideMatfun(vwDidcad.getMatriculaFunc());
			report.setDinideNumpos(vwDidcad.getNumeroPosto());
			report.setDinideRegger(vwDidcad.getNumeroRg());
			report.setDinideRenaid(vwDidcad.getRenaid());
			report.gravaRelatorio(2);

			// RELATORIO
		}

		// 58T DINIDE-NUMPRO(EM=99999999)
		// 58T DINIDE-NSERIE(EM=99999999)
		if (vwDidcad.registrosProcessados() == 0) {
			idctc004.setMensagemSaida("REGISTRO INEXISTENTE");
		} else {
			idctc004.setMensagemSaida("EMISSAO EFETUADA OK");
		}
		report.gravaRelatorio(3);
		report.imprimir();
		// RELATORIO
	}

	// report.gravaRelatorio( 1);
	// UtilBean.mensagemTexto(" " "*" idcpcb04C.getCabecacet() "PAGINA:  "
	// *PAGE-NUMBER(EFM) "*" idcpcb04C.getCabecaseg() "RELAT:  IDCPCB04" "*"
	// idcpcb04C.getCabecaide() "DATA:" idcpcb04C.getDataCorrente()
	// idctc001.getDataCorrente() idctc004.getDataCorrente()
	// "      RELACAO DAS ATUALIZACOES EFETUADAS PELO POSTO NO CADASTRO"
	// "DE IDENTIFICACAO CIVIL" "-" "POSTO" "MATRIC." "RENAID  " "DATA EXP."
	// "DAT.ATUAL." "REG. GERAL." "NASCIMENTO" "NOME DA PESSOA IDENTIFICADA"
	// "NOME DA MAE" "-");
	// RELATORIO
	private void restaurarEstados(Idctc001 pidctc001, Idctc004 pidctc004) {
		this.idcpcb04Anterior = (Idcpcb04) sessao.getAtributo("IDCPCB04");
		if (pidctc001 != null) {
			idctc001 = pidctc001;
		} else {
			idctc001 = this.idcpcb04Anterior.idctc001;
		}
		idctc001.setSessao(sessao);
		if (pidctc004 != null) {
			idctc004 = pidctc004;
		} else {
			idctc004 = this.idcpcb04Anterior.idctc004;
		}
		idctc004.setSessao(sessao);
		this.faseproc = this.idcpcb04Anterior.faseproc;
	}
}
